package com.pattern.singleton;

import java.io.Serializable;

/**
 * 单例模式
 * 懒汉模式 DDL 什么时候用什么时候生成对象
 * @author LYao15
 */
public class SingletonPattern implements Serializable {
    //声明一个对象
    public static volatile SingletonPattern singleton;

    //构造函数私有化
    private SingletonPattern(){
        if(singleton != null){
            throw new RuntimeException("oopration is not be allowed!");
        }
    }
    //获取实例对象
    private static SingletonPattern getInstance(){
        //进入方法内，先判断实例是否为空，以确定是否需要进入同步代码块
        if(singleton == null){
            synchronized(SingletonPattern.class){
                //进入同步代码块时再次判断实例是否为空
                if(singleton == null){
                    return new SingletonPattern();
                }
            }
        }
        return singleton;
    }

    // 定义readResolve方法，防止反序列化返回不同的对象
    public Object readResolve(){
        return singleton;
    }
}
